package com.analyst;

import com.analyst.entity.Job;
import com.analyst.service.impl.TimeService;
import com.analyst.utils.SpringUtil;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

import java.text.SimpleDateFormat;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

@SpringBootApplication
@MapperScan("com.analyst.mapper")
public class AnalysisApplication {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(AnalysisApplication.class, args);
    }
//        ApplicationContext context = SpringUtil.getApplicationContext();
//
//        TimeService timeService = context.getBean(TimeService.class);
//
//        List<Job> jobList = timeService.initJobsByDataBase();
//
//        // Stream流 | Collectors.toMap 根据收集自身对象
//        // 将 List 集合根据某个成员变量为 key 值将其转成 Map 集合
//        // 1.根据 id 和 name 将其转成 Map 集合
//        // Map<Long, String> map = list.stream().collect(Collectors.toMap(GroupInfoEntity::getId, GroupInfoEntity::getName));
//        // 2.根据 id 和 对象自己 转成 Map 集合
//        // Map<Long, GroupInfoEntity> map = list.stream().collect(Collectors.toMap(GroupInfoEntity::getId, Function.identity()));
//        // 这里的 Function.identity() 等价于 t -> t，就是将对象自己返回。
//        Map<String, Job> sqlJobs = jobList.stream().collect(Collectors.toMap(Job::getId, Function.identity()));
//
//        Scanner scanner = new Scanner(System.in);
//
//        // 更新节点的结束时间是否更新为不同时间，默认为false，即更新为统一时间
//        Boolean isMulTime = false;
//        // 是否需要输入待更新节点的结束时间，默认为false，即需输入结束时间，否则输入开始时间
////        Boolean isStart = false;
//
//        List<Date> newEndTimeList = new ArrayList<>();
//        List<String> updateJobIds = new ArrayList<>();
//        List<String> queryJobIds = new ArrayList<>();
//        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//
//        System.out.println("请输入更新节点个数：");
//        int updateNum = scanner.nextInt();
//
//        if (! isMulTime) {
//            while (updateJobIds.size() != updateNum) {
//                System.out.println("请输入更新节点id（system+job+txdate，如：A_a_2023-07-11）：");
//                //Aa2023-07-11
//                String jobId = scanner.nextLine().trim();
//                if (sqlJobs.containsKey(jobId)) {
//                    updateJobIds.add(jobId);
//                }
//
//                Thread.sleep(500);
//            }
//            System.out.println("输入这些节点提升后的具体结束时间：（如：2023-07-11 03:15:09）");
//            String improveToTime = scanner.nextLine().trim();
//            Date date = dateFormat.parse(improveToTime);
//            newEndTimeList.add(date);
//        }
//        while (updateJobIds.size() != updateNum) {
//            System.out.println("请输入更新节点id（system+job+txdate，如：A_a_2023-07-11）：");
//            //Aa2023-07-11
//            String jobId = scanner.nextLine().trim();
//            if (sqlJobs.containsKey(jobId)) {
//                System.out.println("提升后的具体结束时间为：（如：2023-07-11 03:15:09）");
//                String improveToTime = scanner.nextLine().trim();
//                Date date = dateFormat.parse(improveToTime);
//                newEndTimeList.add(date);
//            }
//            Thread.sleep(500);
//        }
//
//        //记录更新前时间
////        long oldEndTime = endJob.getEndTime().getTime();
//
//        System.out.println("请输入查询的节点数量");
//
//        int queryNum = scanner.nextInt();
//
//        while (queryJobIds.size() != queryNum) {
//            System.out.println("请输入查询的节点id（system+job+txdate，如：A_a_2023-07-11）：");
//            //Ab2023-07-11
//            String queryJobId = scanner.nextLine().trim();
//            if (sqlJobs.containsKey(queryJobId)) {
//                queryJobIds.add(queryJobId);
//            }
//            Thread.sleep(500);
//        }
//
//        List<Job> keyRouteBeforeUpdate = timeService.getKeyRoute(updateJobIds, queryJobIds, sqlJobs);
//        System.out.println("更新前:");
//        for (Job job : keyRouteBeforeUpdate) {
//            System.out.println(job);
//        }
//
//        //pengdingtime
////        TimeService.calPendingTimeMultRoot(jobList);
//
//        //计时
//        long begin = System.currentTimeMillis();
//
//        Map<String, String> queryResult = timeService.parallelUpdateByConcreteTime(updateJobIds, newEndTimeList, queryJobIds);
//
//        long end = System.currentTimeMillis();
//
//        for (int i = 0; i < queryJobIds.size(); i++) {
//            String key = queryJobIds.get(i);
//            System.out.println(key + " 新的结束时间为：" + queryResult.get(key));
//        }
//
//        System.out.println("耗时：(/ms)" + (end - begin));
//    }

}
